/**
 * @fileOverview Castle游戏运行配置参数类源文件
 * @author <a href="http://sivory.my.phpcloud.com">Sivory</a>
 * @version 0.0.1
 */

(function() {

	/** @exports _Class as Name.Sivory.Castle.Core.Config */
	var _Class =

	/**
	 * @class Castle游戏运行配置参数类。主要功能是向游戏内核提供基本配置参数。由用户建立后传入Game类的构造函数，Game类构造函数可接受匿名创建的Config实例。
	 * @example new Name.Sivory.Castle.Core.Game({gameKey:"003332",width:800,height:600});
	 * @author <a href="http://sivory.my.phpcloud.com">Sivory</a>
	 * @version 0.0.1
	 * @see Name.Sivory.Castle.Core.Game
	 */
	Name.Sivory.Castle.Core.Config = function() {

			//引用实例
			var instance = this;

			/**
			 * @public
			 * @field
			 * @type String
			 * @description 游戏容器的id，推荐使用div元素。Castle将在此元素中新建一个canvas元素。
			 * @default "open-sea-game"
			 * @since 0.0.1
			 */
			this.gameContainer = "open-sea-game";

			/**
			 * @public
			 * @field
			 * @type String
			 * @description 游戏的资源文件路径。
			 * @default "../resource/resource.xml"
			 * @since 0.0.1
			 */
			this.resource = "../resource/resource.xml";

			/**
			 * @public
			 * @field
			 * @type String
			 * @description 游戏资源的类型，可选为“xml”与“json”。当选择“xml”时，则要求资源返回数据必须是纯XML文本，当选择“json”时，则要求资源返回数据必须是{status:...,info:...,data:...}结构的JSON字符串。其中status可选0,1来表示请求是否成功。info值为若请求失败时失败的信息。data值为请求的XML文本。
			 * @default "xml"
			 * @since 0.0.1
			 */
			this.resourceType = "xml";

			/**
			 * @public
			 * @field
			 * @type Number
			 * @description 游戏运行时的帧率，单位为frame/s
			 * @default 60
			 * @since 0.0.1
			 */
			this.fps = 60;

			/**
			 * @public
			 * @field
			 * @type String
			 * @description 游戏入口界面id，可以是menu类资源id或是scene类资源id，此id须在XML文档中定义。
			 * @default "mainMenu"
			 * @since 0.0.1
			 */
			this.entryInterface = "mainMenu";

			/**
			 * @public
			 * @field
			 * @type String
			 * @description 游戏入口界面的类型，目前可选menu、scene或是battle。
			 * @default "menu"
			 * @since 0.0.1
			 */
			this.entryInterfaceType = "menu";

			/**
			 * @public
			 * @field
			 * @type Number
			 * @description 键盘按键延时。当玩家按住某个键不动时，将以此时间为间隔周期地触发按键事件。单位为毫秒。
			 * @default 500
			 * @since 0.0.1
			 */
			this.keyDelay = 500;

			/**
			 * @public
			 * @field
			 * @type Number
			 * @description 游戏画布宽度。单位为像素。
			 * @default 600
			 * @since 0.0.1
			 */
			this.width = 600;

			/**
			 * @public
			 * @field
			 * @type Number
			 * @description 游戏画布高度。单位为像素。
			 * @default 500
			 * @since 0.0.1
			 */
			this.height = 500;

			/**
			 * @public
			 * @field
			 * @type Number
			 * @description 游戏单元格宽度。单位为像素。
			 * @default 32
			 * @since 0.0.1
			 */
			this.squarewidth = 32;

			/**
			 * @public
			 * @field
			 * @type Number
			 * @description 游戏单元格高度。单位为像素。
			 * @default 32
			 * @since 0.0.1
			 */
			this.squareheight = 32;

			/**
			 * @public
			 * @field
			 * @type Boolean
			 * @description 游戏调试模式开关。开启调试模式时，会在界面显示游戏数据。
			 * @default false
			 * @since 0.0.1
			 */
			this.debug = false;

			/**
			 * @public
			 * @field
			 * @type String
			 * @description 游戏标识。用于游戏本地存储时区分不同游戏。原则上，一个游戏对应一个固定的游戏标识。取值为任意字符串。
			 * @default "default"
			 * @since 0.0.1
			 */
			this.gameKey = "default";

			/**
			 * @public
			 * @field
			 * @type Array
			 * @description 游戏全局资源，即需要被优先加载的资源。格式参考默认值。
			 * @default [{id:"key-config",type:"keys"},{id:"initial-team",type:"team"}]
			 * @since 0.0.1
			 */
			this.mustLoad = [{
				id: "key-config",
				type: "keys"
			}, {
				id: "initial-team",
				type: "team"
			}];
		};

	/**
	 * @public
	 * @function
	 * @description 将另一个配置对象并入当前实例。
	 * @param {Name.Sivory.Castle.Config} config
	 * @since 0.0.1
	 */
	_Class.prototype.combine = function(config) {
		if(!config) return;
		for(key in instance)
		if(config[key] != null && typeof config[key] != "function") instance[key] = config[key];
	}

})();